查看原文
其他

从幼儿园到小学毕业:孩子学编程的四阶段

ElfeXu 南瓜博士 2020-01-10

孩子从什么时候开始可以学编程?幼儿园即可,在家玩中学。

孩子小学时应该学那种编程语言?Scratch,最合适的语言没有之一。

学会 Scratch 后就该学 Python 或 JavaScript 了吧?不,Scratch足够丰富强大,甚至连初中生都能从中受益良多。

可是 Scratch 看起来只是玩具,用四五年时间写写小游戏、做做动画,太浪费时间了?不,那只是因为人们不会教。


教孩子学编程,远不只是教他们学会用计算机的语言和机器交流。未来的世界不需要码农,需要的是具备良好信息素养、懂得计算思维、会通过自己的创造力和解决问题能力让计算机发挥更大作用的人。我接下来说的四个阶段,就是如何培养孩子这些能力的路径。


本文适用于普娃,学习目标是去理解计算机如何工作,用编程工具创造有趣、有用的东西。本文建议的路径也许不适用于智力超群、志在参加信息学竞赛的孩子。


第一阶段:通过游戏感知程序逻辑,练就勇敢尝试的心态


孩子从幼儿园开始就能学编程。孩子幼儿园时应该在家学编程。

不知道有多少非理工科家长会对这两句话头疼:我自己都不懂,你要我在家教孩子编程?


但是,我可没让你教啊,你只要让孩子玩就行了。玩什么?lightbot 游戏:



寥寥几个指令,就能指挥灯泡小人走路、点亮方块。看似简单,但基础的编程概念都包含在内了:顺序执行、循环、条件判断、函数调用甚至递归和重载……很多编程教育的商业机构宣称的“编程思维”,也不过就是这些。


当孩子玩这个游戏时,你一定要记得告诉孩子别怕做错,多多点击右上角的运行按钮看效果,甚至可以每拖动几块指令就运行一下看看阶段性成果。这个游戏的一大魅力,就在于通过运行程序,孩子们能随时查看结果与自己的预期是否一致,及时的反馈能极大的提升学习效果。测试-失败-调整-测试-失败-调整……我们把这样的过程称作调试(debug)。不断重复这样的过程,孩子自然就不怕犯错乐于尝试。


这种勇敢尝试的心态极其宝贵,所以我强烈建议你除了最开始时陪孩子玩两局帮助他了解规则,后面就千万忍住别再帮忙。我前面说孩子应该只是在家玩这些游戏而不是去编程班,也是因为有时教得太多反而剥夺了孩子们试错的机会


类似的游戏还有  SpriteBox 和 MineCraft 一小时编程等。Code.org 上能找到很多。



如果这些游戏对你的孩子来说难了点,或者你不希望让孩子太早接触电子产品,那还有不插电编程的游戏可以和孩子一起玩,我以后单独写文章来介绍。


第二阶段:照着Scratch自带教程玩,培养探索的习惯


Scratch 是积木式搭建,非常直观,小学低年级甚至幼儿园大班的孩子都能玩。Scratch 入门的一个好方法,是让孩子跟着程序自带的教程做尝试。离线编辑器中的教程是英文版的,不过官网上有中文的pdf可下载: https://resources.scratch.mit.edu/www/cards/zh-cn/ScratchCardsAll.pdf  




在照着教程玩 Scratch 的过程中,爱探索的孩子会尝试对示例程序东改改西换换,换一些别的代码块或超大超小的数字看效果。


比如星星闪烁三下好让玩家留意到的程序和效果是这样的:


但孩子们会好奇的改数字,改出极速闪烁他们就觉得非常好玩。


有敏锐的孩子会问为什么同时能看到大小两个星星,知识面广的孩子回答说是视觉残留。


类似的场景我遇到过很多。往往在孩子的一个“咦,这是什么,我来试试看”的疑问背后,可以引发出一长串的问题:为什么会这样呢?和你的预期一致吗?如果换成那个又会是什么样的效果呢?这个功能可以用来做什么?Scratch是一个再安全不过的环境,最坏情况无非就是把程序重启重新开始,美妙的是每拼接一块积木都可以点击运行马上看到效果,这反馈-修正的过程是非常迅速的,所以孩子能很顺畅的自行探索。


这个阶段,如果孩子兴趣浓厚但光靠图文的说明自学有困难,家长又没有精力教,为孩子选择一些线上课程也是个选择。但千万要注意:很多商业机构为了能快速扩张,会把课程设置成标准化的。这类像填空、选择题一样的标准练习可以教会孩子知识,但教不了探索的习惯。


举个例子:国内某做得非常不错的线上编程课的作业:让角色从A走到B,说一句“哎呀”,然后倒下。请完成这一段动画。

作为对比,大家可以看一下哈佛大学的Scratch创意计算教材第一单元的作业:给定10种积木块,请以任意方式使用它们,并把你的成果展示给大家看。



我们可以到 https://scratch.mit.edu/studios/475480/ 欣赏下孩子们的作品,五花八门什么都有,孩子们真的把这些代码块用活了:


孩子们今后会遇到太多“没人告诉”的事,没人告诉他要做什么,更没人告诉他要怎么做。他最能依靠的就是“我来试试看”。探索的习惯,是这个阶段的孩子从 Scratch 中能收获到的最宝贵的东西。


第四阶段:用计算思维实现自己的创意


倒过来,我先说说第四阶段。第二阶段照着教程做出来的都还只是小玩具,孩子们有丰富得多的创意复杂得多的需求,怎么才能实现呢?这就需要用到计算思维了。


简单的说,计算思维是一种解决问题的方式,它有四个重要组成部分:首先是定义和拆解问题,其次是识别出各子问题的模式,然后是抽象化,最后是用算法来实现。这样的思维方式,早已超越计算机科学,延申到所有学科领域,甚至被用于文学、社会研究、艺术创作等等方面。


通过一个个实现自己创意的项目,孩子们的计算思维能得到充分锻炼。可是用 Scratch 能完成孩子们构思的复杂项目吗?当然能。Scratch 可以写出非常复杂的程序,以下几个作品是不是看起来很眼熟呢?可都是官网上的 griffpatch 大神用 Scratch 开发的哦。



虽然 Scratch 因为缺乏某些功能,程序复杂了看起来就很乱,但瑕不掩瑜,它依旧是最适合小学生的编程语言。


为什么?因为对大多数孩子来说,敲打键盘输入一串串字母的过程,实在是太缓慢也太枯燥了,而且多数语言还没有像 Scratch 那么恰到好处的有舞台和角色的概念,可以方便的做出有良好视觉和交互效果的程序。一件事 Scratch 拖拽积木两分钟就能搞定,Python 或 JavaScript 可能得写上半个小时,为啥非要让孩子和效率过不去呢?


见过不少老师和家长,认为 Scratch 像玩具一样不够高级,只有教 Python 或 JavaScript 才能体现水平。甚至还有教 C 语言的,100 个孩子选修最后只有 3 个孩子坚持下来,活生生的扼杀了 97 个孩子学编程的兴趣啊!我宁可这些孩子别去学,这样至少还为他们今后带着兴趣愉悦学编程保留着可能。


很遗憾的是,不管是学校,还是做少儿编程教育的商业机构,绝大多数为孩子们规划的学习成长路径,都是 Scratch 入门后就学 Python 或 JavaScript。在我看来,这就像学会英语的 Hello 后马上去学拉丁语的 Salve,看似高级,其实只是低水平重复。真正有价值的是用英语说出完整的句子、进而写出漂亮的文章,孩子们真正应该学的是如何用语言表达出自己的思想。


那究竟如何才能让 Scratch 入门的孩子逐渐学会用 Scratch 创作出真正的作品来呢?这就需要第三阶段的锻炼了——


第三阶段:读码探秘,通过阅读和模仿积累自己的模式库


在你写出一篇好文章之前,你一定读过极大量的精彩文章。优秀程序员的成长过程中也少不了大量阅读别人的精彩代码。


小学低年级的孩子已经能 Scratch 入门,但实现自己的项目所需要的计算思维能力,一般得到高年级才能培养出来。中间的第三阶段,最适合孩子们做的,就是去阅读、理解他人的代码。先学一些小小的技巧,再理解作者的思路、代码的组织,最后掌握代码中的套路……就这样把别处的精华一点点积累到自己的脑海中,形成模式库,看得多了熟悉了,以后再需要的时候也就能很容易的用起来。


当然,这么做有一个前提:阅读的代码是整洁的、易于理解的。很可惜,在 Scratch 官网上虽然有极大量精彩的作品,代码却常常是一团乱麻,得费很大劲才能抽丝剥茧找出其中的精彩所在。作为一个写了二十年程序、有轻度代码洁癖的人,真可以在这点上为孩子们出力了:我会选择一些 Scratch 官网上的精彩作品,改写或重写,让代码易于理解;再写点解析文章,带大家理解代码中的小技巧和大套路。


这就是我新开的读码探秘专栏。希望它能带已入门的孩子顺利走过编程学习的第三阶段,早日进入用计算思维实现自己创意的第四阶段,也希望能为给孩子们上完 Scratch 入门课、不知该如何继续深入的老师们带来一些启发。


欢迎关注读码探秘专栏。期待你的鼓励和交流。


    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存